//168：Excel表列名称
//给你一个整数 columnNumber ，返回它在 Excel 表中相对应的列名称。
//
// 例如：
//
//
//A -> 1
//B -> 2
//C -> 3
//...
//Z -> 26
//AA -> 27
//AB -> 28
//...
//
//
//
//
// 示例 1：
//
//
//输入：columnNumber = 1
//输出："A"
//
//
// 示例 2：
//
//
//输入：columnNumber = 28
//输出："AB"
//
//
// 示例 3：
//
//
//输入：columnNumber = 701
//输出："ZY"
//
//
// 示例 4：
//
//
//输入：columnNumber = 2147483647
//输出："FXSHRXW"
//
//
//
//
// 提示：
//
//
// 1 <= columnNumber <= 2³¹ - 1
//
// Related Topics 数学 字符串 👍 533 👎 0
//解题思路：转26进制


import java.util.ArrayList;
import java.util.List;

public class ConvertToTitle {
    public static void main(String[] args) {
        System.out.println(convertToTitle(28));
    }

    public static String convertToTitle(int columnNumber) {
        char[] keys = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};

        List strs = new ArrayList<Character>();
        while (columnNumber >= 1) {
            int tail = columnNumber % 26;
            if (tail == 0) {
                strs.add('Z');
            } else {
                strs.add(keys[tail - 1]);
            }
            columnNumber = (columnNumber - 1) / 26;
        }
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < strs.size(); i++) {
            result.append(strs.get(strs.size() - i - 1));
        }
        return result.toString();
    }
}
